K-fold 교차검증
IT 위키
더 많은 작업
'K-fold Cross Validation'
K개의 fold를 만들어서 교차 검증을 수행하는 머신러닝 모델 검증 기법
K번을 Iteration 하며 학습을 수행 후 최종 모델에 대한 성능 검증 수행
| 1 | 전체 Data 를 Training Data, Test data 로 분할 |
| 2 | Training Data 를 K개 Fold 로 나눔 (K=5) |
| 3 | K-1개는 Training Datat, 1개는 Validation Data 로 지정 |
| 4 | Validation Datat 를 변경하면서 학습 수행 |
| 5 | Test Datat 로 모델 평가 |
- 데이터를 k 개로 나누어, 하나를 검증용·나머지를 학습용으로 쓰는 일을 k 번 반복하고 성과를 평균한다.
- 모든 데이터가 한 번씩 검증에 쓰이므로 데이터가 충분하지 않을 때 주로 쓴다.
- k 를 데이터 수 n 과 같게 해 한 개씩만 빼고 학습하는 것이 LOOCV(Leave-One-Out Cross Validation)다. "k = 2 인 경우를 LOOCV 라 한다" 는 틀리다.
- k 가 클수록 학습 데이터가 많아져 편향은 줄지만 계산량이 늘어난다. 보통 5 나 10 을 쓴다.
| 방식 | 나누는 방법 | 학습 횟수 | 특징 |
|---|---|---|---|
| 홀드아웃(Hold-out) | 학습용·검증용을 한 번만 나눈다(예: 7:3) | 1번 | 가장 빠르다. 어떻게 나뉘었는지에 따라 성능이 크게 흔들린다 |
| k-fold | k 개로 나누어 돌아가며 1개를 검증용으로 쓴다 | k 번 | 홀드아웃보다 평가가 안정적이지만 k 번 학습하므로 더 느리다 |
| 층화 k-fold(Stratified k-fold) | 각 fold 의 클래스 비율을 전체와 같게 맞춰 나눈다 | k 번 | 분류 문제, 특히 클래스가 불균형할 때 쓴다 |
| LOOCV | 데이터 1개만 검증용, 나머지 전부 학습용 | n 번 | 나누는 방법이 하나뿐이라 무작위성이 없다(몇 번을 해도 같은 결과). 계산량이 가장 크다 |
| 시계열 교차검증 | 과거 구간으로 학습하고 그 뒤(미래) 구간으로 검증하며 창을 앞으로 옮긴다 | 구간 수만큼 | 시간 순서를 섞지 않는다 |
- 교차검증의 목적은 모델이 학습 데이터에만 맞는 과적합을 막고 일반화 성능을 제대로 재는 것이다. 대신 학습을 여러 번 하므로 훈련 시간이 늘어난다. "k-fold 가 홀드아웃보다 학습 속도가 빠르다" 는 틀리다.
- 학습 데이터에서 잰 오차(예: 평균 제곱 오차)는 모델이 이미 본 데이터이므로 대개 검증 데이터의 오차보다 작다.
- 시계열에서는 미래 데이터로 학습하고 과거로 검증하면 정보가 새어 나간다. 학습 구간은 항상 검증 구간보다 앞선 시점이어야 하며, "학습 데이터와 검증 데이터가 같은 시간대에 있어야 한다" 는 틀리다. → 시계열 분석